﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BolsaTalentos.DataContextClasses;
using System.Drawing;
using System.Data.SqlClient;

namespace BolsaTalentos.BLL
{
    public class UsuarioAdministrativo : BolsaTalentos.BLL.Usuario
    {
        // Constructores
        public UsuarioAdministrativo(int IDToSearch) 
        {
            try
            {
                DataClassesDataContext DB = new DataClassesDataContext();

                DataContextClasses.UsuariosAdministrativo UsrAdmin = (from ua in DB.UsuariosAdministrativos
                                                                     where ua.ID == IDToSearch
                                                                     select ua).First();

                this.id = UsrAdmin.ID;
                this.userName = UsrAdmin.UserName;
                this.passWord = UsrAdmin.PassWord;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("No existe tal usuario\n" + SqlEx.Message);
            }
        }
        public UsuarioAdministrativo(string UserNameToLog, string PassWordToLog) 
        {
            try
            {
                DataClassesDataContext DB = new DataClassesDataContext();

                DataContextClasses.UsuariosAdministrativo UsrAdmin = (from ua in DB.UsuariosAdministrativos
                                                               where (ua.UserName == UserNameToLog) && (ua.PassWord == PassWordToLog)
                                                               select ua).First();

                this.id = UsrAdmin.ID;
                this.userName = UsrAdmin.UserName;
                this.passWord = UsrAdmin.PassWord;
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("No existe tal usuario o su username o password estan mal escritos\n" + SqlEx.Message);
            }
        }
        public UsuarioAdministrativo(string UserNameToCreate, string PassWordToCreate, bool CrearNuevo) 
        {
            if (CrearNuevo)
            {
                this.userName = UserNameToCreate;
                this.passWord = PassWordToCreate;
            }
            else //  new UsuarioAdministrativo(UserNameToCreate, PassWordToCreate);
            {
                UsuarioAdministrativo TempUsr = new UsuarioAdministrativo(UserNameToCreate, PassWordToCreate);

                this.id = TempUsr.ID;
                this.userName = TempUsr.UserName;
                this.passWord = TempUsr.PassWord;
            }
        }

        // Metodos
        public void Insertar() 
        {
            DataClassesDataContext DB = new DataClassesDataContext();
            try
            {
                DataContextClasses.UsuariosAdministrativo UserToInsert = new DataContextClasses.UsuariosAdministrativo();

                UserToInsert.UserName = this.userName;
                UserToInsert.PassWord = this.passWord;

                DB.UsuariosAdministrativos.InsertOnSubmit(UserToInsert);

                DB.SubmitChanges();
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Hubo un problema con la Base de datos\n" + SqlEx.Message);
            }
        }

        public void CrearNuevaEmpresa(Empresa EmpresaACrear) 
        {
            try
            {
                EmpresaACrear.Insertar();

                Empresa NuevaEmpresa = new Empresa(EmpresaACrear.RNC);

                new UsuarioEmpresa("usr" + NuevaEmpresa.RNC, "123.456", NuevaEmpresa.ID).Insertar();

                //foreach (Contacto item in EmpresaACrear.Contactos)
                //{
                //    NuevaEmpresa.AgregarContacto(item.TipoContactoID, item.Descripcion);
                //}
            }
            catch(Exception Ex) 
            {
                throw Ex;
            }
        }

        public void AceptarSolicitudDeEmpresa(int IDEmpresa) 
        {
            Empresa EmpresaAAceptar = new Empresa(IDEmpresa);

            EmpresaAAceptar.Activar(this.id);

            new UsuarioEmpresa("usr" + EmpresaAAceptar.RNC, "123.456", EmpresaAAceptar.ID).Insertar();
        }

        public void EliminarHabilidad(int HabilidadID)
        {
            try
            {
                DataClassesDataContext DB = new DataClassesDataContext();
                var Vacante_HabilidadToDelete = from vhtd in DB.Vacantes_Habilidades
                                                where vhtd.ID_Habilidad == HabilidadID
                                                select vhtd;

                var Egresado_HabilidadesToDelete = from ehtd in DB.Egresados_Habilidades
                                                   where ehtd.ID_Habilidad == HabilidadID
                                                   select ehtd;

                Habilidade HabilidadToDelete = (from htd in DB.Habilidades
                                                where htd.ID == HabilidadID
                                                select htd).First();

                DB.Vacantes_Habilidades.DeleteAllOnSubmit(Vacante_HabilidadToDelete);
                DB.Egresados_Habilidades.DeleteAllOnSubmit(Egresado_HabilidadesToDelete);
                DB.Habilidades.DeleteOnSubmit(HabilidadToDelete);

                DB.SubmitChanges();
            }
            catch (SqlException SqlEx)
            {
                throw new Exception("Error en la base de datos. Intente en unos minutos" + SqlEx.Message);
            }
        }

        public static UsuarioAdministrativo GetUsuarioCreadorByEmpresaID(int EmpresaID)
        {
             DataClassesDataContext DB = new DataClassesDataContext();

            var EmpresaCreada = (from ce in DB.Empresas
                                   where ce.ID == EmpresaID
                                   select ce).First();
            try
            {
                UsuarioAdministrativo Creador = new UsuarioAdministrativo(System.Convert.ToInt32(EmpresaCreada.ID_UsuarioAdministrativo));
                return Creador;
            }
            catch (Exception Ex)
            {
                throw new Exception("No existe tal usuario\n" + Ex.Message);
            }
        }
    }
}
